home *** CD-ROM | disk | FTP | other *** search
/ BCI NET / BCI NET Dec 94.iso / archives / programming / languages / oberon.lha / system / In.Mod (.txt) < prev    next >
Oberon Text  |  1990-01-01  |  2KB  |  58 lines

  1. Syntax10.Scn.Fnt
  2. MODULE In;    
  3. (* Stream-oriented text input, MR 1992, NW 22.5.93 *)
  4. IMPORT Texts, Viewers, Oberon, TextFrames;
  5. VAR Done*: BOOLEAN;
  6.     S: Texts.Scanner;
  7. PROCEDURE Open*;
  8. VAR beg, end, time: LONGINT;
  9.     V: Viewers.Viewer;
  10.     T: Texts.Text;
  11. BEGIN Texts.OpenScanner(S, Oberon.Par.text, Oberon.Par.pos);  Texts.Scan(S);
  12.     IF (S.class = Texts.Char) & (S.c = "^") THEN
  13.         (* start input stream at beginning of selection *)
  14.         Oberon.GetSelection(T, beg, end, time);
  15.         IF time >= 0 THEN Texts.OpenScanner(S, T, beg); Done := TRUE
  16.         ELSE Done := FALSE
  17.         END
  18.     ELSIF (S.class = Texts.Char) & (S.c = "*") THEN
  19.         (* start input stream at beginning of text in marked viewer *)
  20.         V := Oberon.MarkedViewer();
  21.         IF (V.dsc # NIL) & (V.dsc.next IS TextFrames.Frame) THEN
  22.             T := V.dsc.next(TextFrames.Frame).text; Texts.OpenScanner(S, T, 0); Done := TRUE
  23.         ELSE Done := FALSE
  24.         END
  25.     ELSE (* start input stream after command name *)
  26.         T := Oberon.Par.text; Texts.OpenScanner(S, T, Oberon.Par.pos); Done := TRUE
  27. END Open;
  28. PROCEDURE Char*(VAR ch: CHAR);
  29. BEGIN
  30.     IF Done THEN ch := S.nextCh; Done := ~S.eot; Texts.Read(S, S.nextCh) END
  31. END Char;
  32. PROCEDURE Int*(VAR i: INTEGER);
  33. BEGIN
  34.     IF Done THEN Texts.Scan(S); i := SHORT(S.i); Done := (S.class = Texts.Int) END
  35. END Int;
  36. PROCEDURE LongInt*(VAR i: LONGINT);
  37. BEGIN
  38.     IF Done THEN Texts.Scan(S); i := S.i; Done := (S.class = Texts.Int) END
  39. END LongInt;
  40. PROCEDURE Real*(VAR x: REAL);
  41. BEGIN
  42.     IF Done THEN Texts.Scan(S); x := S.x; Done := (S.class = Texts.Real) END
  43. END Real;
  44. PROCEDURE LongReal*(VAR y: LONGREAL);
  45. BEGIN
  46.     IF Done THEN Texts.Scan(S); y := S.y; Done := (S.class = Texts.LongReal) END
  47. END LongReal;
  48. PROCEDURE Name*(VAR name: ARRAY OF CHAR);
  49. BEGIN
  50.     IF Done THEN Texts.Scan(S); COPY(S.s, name); Done := (S.class = Texts.Name) END
  51. END Name;
  52. PROCEDURE String*(VAR str: ARRAY OF CHAR);
  53. BEGIN
  54.     IF Done THEN Texts.Scan(S); COPY(S.s, str); Done := (S.class = Texts.String) END
  55. END String;
  56. BEGIN Done := FALSE
  57. END In.
  58.